﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleAssembly
{
    //本文介绍了C#的四种排序算法：冒泡排序、选择排序、插入排序和希尔排序 

    //冒泡排序

    public class BubbleSorter
    {
        public void Sort(int[] list)
        {
            int i, j, temp;

            bool done = false;

            j = 1;

            while ((j < list.Length) && (!done))
            {
                done = true;

                for (i = 0; i < list.Length - j; i++)
                {

                    if (list[i] > list[i + 1])
                    {

                        done = false;

                        temp = list[i];

                        list[i] = list[i + 1];

                        list[i + 1] = temp;

                    }
                }

                j++;
            }

        }

        //public class MainClass
        //{
        //    public static void Main()
        //    {

        //        int[] iArrary = new int[] { 1, 5, 13, 6, 10, 55, 99, 2, 87, 12, 34, 75, 33, 47 };

        //        BubbleSorter sh = new BubbleSorter();

        //        sh.Sort(iArrary);

        //        for (int m = 0; m < iArrary.Length; m++)

        //            Console.Write("{0} ", iArrary[m]);

        //        Console.WriteLine();

        //    }
        //}

    }


    //选择排序 
    public class SelectionSorter
    {
        private int min;

        public void Sort(int[] list)
        {
            for (int i = 0; i < list.Length - 1; i++)
            {
                min = i;

                for (int j = i + 1; j < list.Length; j++)
                {
                    if (list[j] < list[min])

                        min = j;

                }

                int t = list[min];

                list[min] = list[i];

                list[i] = t;

            }
        }

    }

    //public class MainClass
    //{
    //    public static void Main()
    //    {

    //        int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };

    //        SelectionSorter ss = new SelectionSorter();

    //        ss.Sort(iArrary);

    //        for (int m = 0; m < iArrary.Length; m++)

    //            Console.Write("{0} ", iArrary[m]);

    //        Console.WriteLine();

    //    }
    //}




    //插入排序 
    public class InsertionSorter
    {
        public void Sort(int[] list)
        {
            for (int i = 1; i < list.Length; i++)
            {
                int t = list[i];

                int j = i;

                while ((j > 0) && (list[j - 1] > t))
                {
                    list[j] = list[j - 1];

                    --j;

                }

                list[j] = t;
            }

        }

    }

    //public class InsertMainClass
    //{
    //    public static void Main()
    //    {

    //        int[] iArrary = new int[] { 1, 13, 3, 6, 10, 55, 98, 2, 87, 12, 34, 75, 33, 47 };

    //        InsertionSorter ii = new InsertionSorter();

    //        ii.Sort(iArrary);

    //        for (int m = 0; m < iArrary.Length; m++)

    //            Console.Write("{0}", iArrary[m]);

    //        Console.WriteLine();

    //    }
    //}
    
    /// <summary>
    /// 希尔排序 
    ///希尔排序是将组分段,进行插入排序. 
    /// </summary>
    public class ShellSorter
    {

        public void Sort(int[] list)
        {

            int inc;

            for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;

            for (; inc > 0; inc /= 3)
            {

                for (int i = inc + 1; i <= list.Length; i += inc)
                {

                    int t = list[i - 1];

                    int j = i;

                    while ((j > inc) && (list[j - inc - 1] > t))
                    {

                        list[j - 1] = list[j - inc - 1];

                        j -= inc;

                    }

                    list[j - 1] = t;

                }
            }

        }
    }

    //public class ShellMainClass
    //{
    //    public static void Main()
    //    {

    //        int[] iArrary = new int[] { 1, 5, 13, 6, 10, 55, 99, 2, 87, 12, 34, 75, 33, 47 };

    //        ShellSorter sh = new ShellSorter();

    //        sh.Sort(iArrary);

    //        for (int m = 0; m < iArrary.Length; m++)

    //            Console.Write("{0} ", iArrary[m]);

    //        Console.WriteLine();

    //    }
    //}




}
